// vite.config.ts
import { resolve } from "node:path";
import { fileURLToPath } from "node:url";
import * as process from "node:process";
import { loadEnv } from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/vite@5.4.21_@types+node@20.19.24_less@4.4.2_terser@5.44.0/node_modules/vite/dist/node/index.js";

// plugins/index.ts
import vue from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/@vitejs+plugin-vue@5.2.4_vite@5.4.21_@types+node@20.19.24_less@4.4.2_terser@5.44.0__vue@3.5.22_typescript@5.5.4_/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import vueJsx from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/@vitejs+plugin-vue-jsx@4.2.0_vite@5.4.21_@types+node@20.19.24_less@4.4.2_terser@5.44.0__vue@3.5.22_typescript@5.5.4_/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs";
import AutoImport from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/unplugin-auto-import@0.16.7_@vueuse+core@10.11.1_vue@3.5.22_typescript@5.5.4___rollup@4.52.5/node_modules/unplugin-auto-import/dist/vite.js";
import GenerateConfig from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/unplugin-config@0.1.5_esbuild@0.20.2_rollup@4.52.5_vite@5.4.21_@types+node@20.19.24_less@4.4.2_terser@5.44.0_/node_modules/unplugin-config/dist/vite.js";
import Components from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/unplugin-vue-components@0.26.0_@babel+parser@7.28.5_rollup@4.52.5_vue@3.5.22_typescript@5.5.4_/node_modules/unplugin-vue-components/dist/vite.js";
import VitePluginPreloadAll from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/@mistjs+vite-plugin-preload@0.0.1_rollup@4.52.5_vite@5.4.21_@types+node@20.19.24_less@4.4.2_terser@5.44.0_/node_modules/@mistjs/vite-plugin-preload/dist/index.mjs";
import Unocss from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/unocss@0.57.7_postcss@8.5.6_rollup@4.52.5_vite@5.4.21_@types+node@20.19.24_less@4.4.2_terser@5.44.0_/node_modules/unocss/dist/vite.mjs";
import AntdvResolver from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/antdv-component-resolver@1.0.8_unplugin-vue-components@0.26.0_@babel+parser@7.28.5_rollup@4.5_2nucypwujmf4ejl34umy5vncvq/node_modules/antdv-component-resolver/dist/index.mjs";

// plugins/constants.ts
var GLOB_CONFIG_FILE_NAME = "_app.config.js";
var OUTPUT_DIR = "dist";

// plugins/vite-build-info.ts
import { readdir, stat } from "node:fs";
import dayjs from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/dayjs.min.js";
import duration from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/duration.js";
import pkg from "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js";
var { green, blue, bold } = pkg;
dayjs.extend(duration);
var fileListTotal = [];
function recursiveDirectory(folder, callback) {
  readdir(folder, (err, files) => {
    if (err)
      throw err;
    let count = 0;
    const checkEnd = () => {
      ++count === files.length && callback();
    };
    files.forEach((item) => {
      stat(`${folder}/${item}`, async (err2, stats) => {
        if (err2)
          throw err2;
        if (stats.isFile()) {
          fileListTotal.push(stats.size);
          checkEnd();
        } else if (stats.isDirectory()) {
          recursiveDirectory(`${folder}/${item}/`, checkEnd);
        }
      });
    });
    files.length === 0 && callback();
  });
}
function sum(arr) {
  return arr.reduce((t, c) => {
    return t + c;
  }, 0);
}
function formatBytes(a, b) {
  if (a === 0)
    return "0 Bytes";
  const c = 1024;
  const d = b || 2;
  const e = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
  const f = Math.floor(Math.log(a) / Math.log(c));
  return `${Number.parseFloat((a / c ** f).toFixed(d))} ${e[f]}`;
}
function viteBuildInfo(name) {
  let config;
  let startTime;
  let endTime;
  return {
    name: "vite:buildInfo",
    configResolved(resolvedConfig) {
      config = resolvedConfig;
    },
    buildStart() {
      console.log(
        bold(
          green(
            `\u{1F44F}\u6B22\u8FCE\u4F7F\u7528\u5C0F\u53EF\u7231\u6253\u5305\uFF0C\u73B0\u5728\u6B63\u5168\u529B\u4E3A\u60A8${config.command === "build" ? "\u6253\u5305" : "\u7F16\u8BD1"}`
          )
        )
      );
      if (config.command === "build")
        startTime = dayjs(/* @__PURE__ */ new Date());
    },
    closeBundle() {
      if (config.command === "build") {
        endTime = dayjs(/* @__PURE__ */ new Date());
        recursiveDirectory(config.build.outDir, () => {
          console.log(
            bold(
              green(
                `\u606D\u559C\u6253\u5305\u5B8C\u6210\u{1F389}\uFF08\u603B\u7528\u65F6${dayjs.duration(endTime.diff(startTime)).format("mm\u5206ss\u79D2")}\uFF0C\u6253\u5305\u540E\u7684\u5927\u5C0F\u4E3A${formatBytes(
                  sum(fileListTotal)
                )}\uFF09`
              )
            )
          );
        });
      }
    }
  };
}

// plugins/index.ts
function createVitePlugins(env) {
  const vitePluginList = [
    vue(),
    vueJsx(),
    VitePluginPreloadAll(),
    AutoImport({
      imports: [
        "vue",
        "vue-router",
        "vue-i18n",
        "@vueuse/core",
        "pinia"
      ],
      dts: "types/auto-imports.d.ts",
      dirs: ["src/stores", "src/composables"]
    }),
    Components({
      resolvers: [AntdvResolver()],
      dts: "types/components.d.ts",
      dirs: ["src/components"]
    }),
    // https://github.com/kirklin/unplugin-config
    GenerateConfig({
      appName: env.VITE_GLOB_APP_TITLE,
      configFile: {
        generate: true,
        fileName: GLOB_CONFIG_FILE_NAME,
        outputDir: OUTPUT_DIR
      },
      envVariables: {
        prefix: "VITE_GLOB_"
      }
    }),
    Unocss(),
    viteBuildInfo(env.VITE_APP_NAME)
  ];
  return vitePluginList;
}

// vite.config.ts
var __vite_injected_original_import_meta_url = "file:///C:/Users/31468/Desktop/CCPIT/gitee%E5%BC%80%E5%8F%91/%E8%80%83%E8%AF%95%E6%8A%A5%E5%90%8D%E7%B3%BB%E7%BB%9F/%E8%80%83%E7%94%9F%E6%8A%A5%E5%90%8D%E5%89%8D%E5%8F%B0/ccpittranining-center/vite.config.ts";
var baseSrc = fileURLToPath(new URL("./src", __vite_injected_original_import_meta_url));
var vite_config_default = ({ mode }) => {
  const env = loadEnv(mode, process.cwd());
  const proxyObj = {};
  if (mode === "development" && env.VITE_APP_BASE_API_DEV && env.VITE_APP_BASE_URL_DEV) {
    proxyObj[env.VITE_APP_BASE_API_DEV] = {
      target: env.VITE_APP_BASE_URL_DEV,
      changeOrigin: true,
      rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_API_DEV}`), "")
    };
  }
  return {
    plugins: createVitePlugins(env),
    resolve: {
      alias: [
        {
          find: "dayjs",
          replacement: "dayjs/esm"
        },
        {
          find: /^dayjs\/locale/,
          replacement: "dayjs/esm/locale"
        },
        {
          find: /^dayjs\/plugin/,
          replacement: "dayjs/esm/plugin"
        },
        {
          find: "vue-i18n",
          replacement: mode === "development" ? "vue-i18n/dist/vue-i18n.esm-browser.js" : "vue-i18n/dist/vue-i18n.esm-bundler.js"
        },
        {
          find: /^ant-design-vue\/es$/,
          replacement: "ant-design-vue/es"
        },
        {
          find: /^ant-design-vue\/dist$/,
          replacement: "ant-design-vue/dist"
        },
        {
          find: /^ant-design-vue\/lib$/,
          replacement: "ant-design-vue/es"
        },
        {
          find: /^ant-design-vue$/,
          replacement: "ant-design-vue/es"
        },
        {
          find: "lodash",
          replacement: "lodash-es"
        },
        {
          find: "~@",
          replacement: baseSrc
        },
        {
          find: "~",
          replacement: baseSrc
        },
        {
          find: "@",
          replacement: baseSrc
        },
        {
          find: "~#",
          replacement: resolve(baseSrc, "./enums")
        }
      ]
    },
    build: {
      chunkSizeWarningLimit: 4096,
      outDir: OUTPUT_DIR,
      rollupOptions: {
        output: {
          manualChunks: {
            vue: ["vue", "vue-router", "pinia", "vue-i18n", "@vueuse/core"],
            antd: ["ant-design-vue", "@ant-design/icons-vue", "dayjs"]
            // lodash: ['loadsh-es'],
          }
        }
      }
    },
    server: {
      port: 6679,
      proxy: {
        ...proxyObj
        // [env.VITE_APP_BASE_API]: {
        //   target: env.VITE_APP_BASE_URL,
        // //   如果你是https接口，需要配置这个参数
        // //   secure: false,
        //   changeOrigin: true,
        //   rewrite: path => path.replace(new RegExp(`^${env.VITE_APP_BASE_API}`), ''),
        // },
      }
    }
    // test: {
    //   globals: true,
    //   environment: 'jsdom',
    // },
  };
};
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAicGx1Z2lucy9pbmRleC50cyIsICJwbHVnaW5zL2NvbnN0YW50cy50cyIsICJwbHVnaW5zL3ZpdGUtYnVpbGQtaW5mby50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXDMxNDY4XFxcXERlc2t0b3BcXFxcQ0NQSVRcXFxcZ2l0ZWVcdTVGMDBcdTUzRDFcXFxcXHU4MDAzXHU4QkQ1XHU2MkE1XHU1NDBEXHU3Q0ZCXHU3RURGXFxcXFx1ODAwM1x1NzUxRlx1NjJBNVx1NTQwRFx1NTI0RFx1NTNGMFxcXFxjY3BpdHRyYW5pbmluZy1jZW50ZXJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXDMxNDY4XFxcXERlc2t0b3BcXFxcQ0NQSVRcXFxcZ2l0ZWVcdTVGMDBcdTUzRDFcXFxcXHU4MDAzXHU4QkQ1XHU2MkE1XHU1NDBEXHU3Q0ZCXHU3RURGXFxcXFx1ODAwM1x1NzUxRlx1NjJBNVx1NTQwRFx1NTI0RFx1NTNGMFxcXFxjY3BpdHRyYW5pbmluZy1jZW50ZXJcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzLzMxNDY4L0Rlc2t0b3AvQ0NQSVQvZ2l0ZWUlRTUlQkMlODAlRTUlOEYlOTEvJUU4JTgwJTgzJUU4JUFGJTk1JUU2JThBJUE1JUU1JTkwJThEJUU3JUIzJUJCJUU3JUJCJTlGLyVFOCU4MCU4MyVFNyU5NCU5RiVFNiU4QSVBNSVFNSU5MCU4RCVFNSU4OSU4RCVFNSU4RiVCMC9jY3BpdHRyYW5pbmluZy1jZW50ZXIvdml0ZS5jb25maWcudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnXHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcclxuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnXHJcbmltcG9ydCB7IGxvYWRFbnYgfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgdHlwZSB7IENvbmZpZ0VudiwgVXNlckNvbmZpZyB9IGZyb20gJ3ZpdGUnXHJcbmltcG9ydCB7IGNyZWF0ZVZpdGVQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW5zJ1xyXG5pbXBvcnQgeyBPVVRQVVRfRElSIH0gZnJvbSAnLi9wbHVnaW5zL2NvbnN0YW50cydcclxuXHJcbmNvbnN0IGJhc2VTcmMgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vc3JjJywgaW1wb3J0Lm1ldGEudXJsKSlcclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGRlZmF1bHQgKHsgbW9kZSB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpXHJcbiAgY29uc3QgcHJveHlPYmogPSB7fVxyXG4gIGlmIChtb2RlID09PSAnZGV2ZWxvcG1lbnQnICYmIGVudi5WSVRFX0FQUF9CQVNFX0FQSV9ERVYgJiYgZW52LlZJVEVfQVBQX0JBU0VfVVJMX0RFVikge1xyXG4gICAgcHJveHlPYmpbZW52LlZJVEVfQVBQX0JBU0VfQVBJX0RFVl0gPSB7XHJcbiAgICAgIHRhcmdldDogZW52LlZJVEVfQVBQX0JBU0VfVVJMX0RFVixcclxuICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICByZXdyaXRlOiBwYXRoID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtlbnYuVklURV9BUFBfQkFTRV9BUElfREVWfWApLCAnJyksXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyhlbnYpLFxyXG4gICAgcmVzb2x2ZToge1xyXG4gICAgICBhbGlhczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbmQ6ICdkYXlqcycsXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogJ2RheWpzL2VzbScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAvXmRheWpzXFwvbG9jYWxlLyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiAnZGF5anMvZXNtL2xvY2FsZScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAvXmRheWpzXFwvcGx1Z2luLyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiAnZGF5anMvZXNtL3BsdWdpbicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAndnVlLWkxOG4nLFxyXG4gICAgICAgICAgcmVwbGFjZW1lbnQ6IG1vZGUgPT09ICdkZXZlbG9wbWVudCcgPyAndnVlLWkxOG4vZGlzdC92dWUtaTE4bi5lc20tYnJvd3Nlci5qcycgOiAndnVlLWkxOG4vZGlzdC92dWUtaTE4bi5lc20tYnVuZGxlci5qcycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAvXmFudC1kZXNpZ24tdnVlXFwvZXMkLyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiAnYW50LWRlc2lnbi12dWUvZXMnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmluZDogL15hbnQtZGVzaWduLXZ1ZVxcL2Rpc3QkLyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiAnYW50LWRlc2lnbi12dWUvZGlzdCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAvXmFudC1kZXNpZ24tdnVlXFwvbGliJC8sXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogJ2FudC1kZXNpZ24tdnVlL2VzJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbmQ6IC9eYW50LWRlc2lnbi12dWUkLyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiAnYW50LWRlc2lnbi12dWUvZXMnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmluZDogJ2xvZGFzaCcsXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogJ2xvZGFzaC1lcycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAnfkAnLFxyXG4gICAgICAgICAgcmVwbGFjZW1lbnQ6IGJhc2VTcmMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAnficsXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogYmFzZVNyYyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbmQ6ICdAJyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiBiYXNlU3JjLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmluZDogJ34jJyxcclxuICAgICAgICAgIHJlcGxhY2VtZW50OiByZXNvbHZlKGJhc2VTcmMsICcuL2VudW1zJyksXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICBidWlsZDoge1xyXG4gICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDQwOTYsXHJcbiAgICAgIG91dERpcjogT1VUUFVUX0RJUixcclxuICAgICAgcm9sbHVwT3B0aW9uczoge1xyXG4gICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgbWFudWFsQ2h1bmtzOiB7XHJcbiAgICAgICAgICAgIHZ1ZTogWyd2dWUnLCAndnVlLXJvdXRlcicsICdwaW5pYScsICd2dWUtaTE4bicsICdAdnVldXNlL2NvcmUnXSxcclxuICAgICAgICAgICAgYW50ZDogWydhbnQtZGVzaWduLXZ1ZScsICdAYW50LWRlc2lnbi9pY29ucy12dWUnLCAnZGF5anMnXSxcclxuICAgICAgICAgICAgLy8gbG9kYXNoOiBbJ2xvYWRzaC1lcyddLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHNlcnZlcjoge1xyXG4gICAgICBwb3J0OiA2Njc5LFxyXG4gICAgICBwcm94eToge1xyXG4gICAgICAgIC4uLnByb3h5T2JqLFxyXG4gICAgICAgIC8vIFtlbnYuVklURV9BUFBfQkFTRV9BUEldOiB7XHJcbiAgICAgICAgLy8gICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX1VSTCxcclxuICAgICAgICAvLyAvLyAgIFx1NTk4Mlx1Njc5Q1x1NEY2MFx1NjYyRmh0dHBzXHU2M0E1XHU1M0UzXHVGRjBDXHU5NzAwXHU4OTgxXHU5MTREXHU3RjZFXHU4RkQ5XHU0RTJBXHU1M0MyXHU2NTcwXHJcbiAgICAgICAgLy8gLy8gICBzZWN1cmU6IGZhbHNlLFxyXG4gICAgICAgIC8vICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICAgIC8vICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7ZW52LlZJVEVfQVBQX0JBU0VfQVBJfWApLCAnJyksXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICAvLyB0ZXN0OiB7XHJcbiAgICAvLyAgIGdsb2JhbHM6IHRydWUsXHJcbiAgICAvLyAgIGVudmlyb25tZW50OiAnanNkb20nLFxyXG4gICAgLy8gfSxcclxuICB9XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwzMTQ2OFxcXFxEZXNrdG9wXFxcXENDUElUXFxcXGdpdGVlXHU1RjAwXHU1M0QxXFxcXFx1ODAwM1x1OEJENVx1NjJBNVx1NTQwRFx1N0NGQlx1N0VERlxcXFxcdTgwMDNcdTc1MUZcdTYyQTVcdTU0MERcdTUyNERcdTUzRjBcXFxcY2NwaXR0cmFuaW5pbmctY2VudGVyXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXDMxNDY4XFxcXERlc2t0b3BcXFxcQ0NQSVRcXFxcZ2l0ZWVcdTVGMDBcdTUzRDFcXFxcXHU4MDAzXHU4QkQ1XHU2MkE1XHU1NDBEXHU3Q0ZCXHU3RURGXFxcXFx1ODAwM1x1NzUxRlx1NjJBNVx1NTQwRFx1NTI0RFx1NTNGMFxcXFxjY3BpdHRyYW5pbmluZy1jZW50ZXJcXFxccGx1Z2luc1xcXFxpbmRleC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvMzE0NjgvRGVza3RvcC9DQ1BJVC9naXRlZSVFNSVCQyU4MCVFNSU4RiU5MS8lRTglODAlODMlRTglQUYlOTUlRTYlOEElQTUlRTUlOTAlOEQlRTclQjMlQkIlRTclQkIlOUYvJUU4JTgwJTgzJUU3JTk0JTlGJUU2JThBJUE1JUU1JTkwJThEJUU1JTg5JThEJUU1JThGJUIwL2NjcGl0dHJhbmluaW5nLWNlbnRlci9wbHVnaW5zL2luZGV4LnRzXCI7aW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSdcclxuaW1wb3J0IHZ1ZUpzeCBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUtanN4J1xyXG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJ1xyXG5pbXBvcnQgR2VuZXJhdGVDb25maWcgZnJvbSAndW5wbHVnaW4tY29uZmlnL3ZpdGUnXHJcbmltcG9ydCBDb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnXHJcbmltcG9ydCBWaXRlUGx1Z2luUHJlbG9hZEFsbCBmcm9tICdAbWlzdGpzL3ZpdGUtcGx1Z2luLXByZWxvYWQnXHJcbmltcG9ydCBVbm9jc3MgZnJvbSAndW5vY3NzL3ZpdGUnXHJcbmltcG9ydCBBbnRkdlJlc29sdmVyIGZyb20gJ2FudGR2LWNvbXBvbmVudC1yZXNvbHZlcidcclxuaW1wb3J0IHsgR0xPQl9DT05GSUdfRklMRV9OQU1FLCBPVVRQVVRfRElSIH0gZnJvbSAnLi9jb25zdGFudHMnXHJcbmltcG9ydCB7IHZpdGVCdWlsZEluZm8gfSBmcm9tICcuL3ZpdGUtYnVpbGQtaW5mbydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWaXRlUGx1Z2lucyhlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICBjb25zdCB2aXRlUGx1Z2luTGlzdDogKFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdKVtdID0gW1xyXG4gICAgdnVlKCksXHJcbiAgICB2dWVKc3goKSxcclxuICAgIFZpdGVQbHVnaW5QcmVsb2FkQWxsKCksXHJcbiAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgaW1wb3J0czogW1xyXG4gICAgICAgICd2dWUnLFxyXG4gICAgICAgICd2dWUtcm91dGVyJyxcclxuICAgICAgICAndnVlLWkxOG4nLFxyXG4gICAgICAgICdAdnVldXNlL2NvcmUnLFxyXG4gICAgICAgICdwaW5pYScsXHJcbiAgICAgIF0sXHJcbiAgICAgIGR0czogJ3R5cGVzL2F1dG8taW1wb3J0cy5kLnRzJyxcclxuICAgICAgZGlyczogWydzcmMvc3RvcmVzJywgJ3NyYy9jb21wb3NhYmxlcyddLFxyXG4gICAgfSksXHJcbiAgICBDb21wb25lbnRzKHtcclxuICAgICAgcmVzb2x2ZXJzOiBbQW50ZHZSZXNvbHZlcigpXSxcclxuICAgICAgZHRzOiAndHlwZXMvY29tcG9uZW50cy5kLnRzJyxcclxuICAgICAgZGlyczogWydzcmMvY29tcG9uZW50cyddLFxyXG4gICAgfSksXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20va2lya2xpbi91bnBsdWdpbi1jb25maWdcclxuICAgIEdlbmVyYXRlQ29uZmlnKHtcclxuICAgICAgYXBwTmFtZTogZW52LlZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgIGNvbmZpZ0ZpbGU6IHtcclxuICAgICAgICBnZW5lcmF0ZTogdHJ1ZSxcclxuICAgICAgICBmaWxlTmFtZTogR0xPQl9DT05GSUdfRklMRV9OQU1FLFxyXG4gICAgICAgIG91dHB1dERpcjogT1VUUFVUX0RJUixcclxuICAgICAgfSxcclxuICAgICAgZW52VmFyaWFibGVzOiB7XHJcbiAgICAgICAgcHJlZml4OiAnVklURV9HTE9CXycsXHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICAgIFVub2NzcygpLFxyXG4gICAgdml0ZUJ1aWxkSW5mbyhlbnYuVklURV9BUFBfTkFNRSksXHJcbiAgXVxyXG4gIHJldHVybiB2aXRlUGx1Z2luTGlzdFxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMzE0NjhcXFxcRGVza3RvcFxcXFxDQ1BJVFxcXFxnaXRlZVx1NUYwMFx1NTNEMVxcXFxcdTgwMDNcdThCRDVcdTYyQTVcdTU0MERcdTdDRkJcdTdFREZcXFxcXHU4MDAzXHU3NTFGXHU2MkE1XHU1NDBEXHU1MjREXHU1M0YwXFxcXGNjcGl0dHJhbmluaW5nLWNlbnRlclxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwzMTQ2OFxcXFxEZXNrdG9wXFxcXENDUElUXFxcXGdpdGVlXHU1RjAwXHU1M0QxXFxcXFx1ODAwM1x1OEJENVx1NjJBNVx1NTQwRFx1N0NGQlx1N0VERlxcXFxcdTgwMDNcdTc1MUZcdTYyQTVcdTU0MERcdTUyNERcdTUzRjBcXFxcY2NwaXR0cmFuaW5pbmctY2VudGVyXFxcXHBsdWdpbnNcXFxcY29uc3RhbnRzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8zMTQ2OC9EZXNrdG9wL0NDUElUL2dpdGVlJUU1JUJDJTgwJUU1JThGJTkxLyVFOCU4MCU4MyVFOCVBRiU5NSVFNiU4QSVBNSVFNSU5MCU4RCVFNyVCMyVCQiVFNyVCQiU5Ri8lRTglODAlODMlRTclOTQlOUYlRTYlOEElQTUlRTUlOTAlOEQlRTUlODklOEQlRTUlOEYlQjAvY2NwaXR0cmFuaW5pbmctY2VudGVyL3BsdWdpbnMvY29uc3RhbnRzLnRzXCI7Ly8gVGhpcyBjb25zdGFudCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcclxuZXhwb3J0IGNvbnN0IEdMT0JfQ09ORklHX0ZJTEVfTkFNRSA9ICdfYXBwLmNvbmZpZy5qcydcclxuXHJcbi8vIFRoaXMgY29uc3RhbnQgc2V0cyB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIFZpdGUgcGFja2FnZVxyXG5leHBvcnQgY29uc3QgT1VUUFVUX0RJUiA9ICdkaXN0J1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXDMxNDY4XFxcXERlc2t0b3BcXFxcQ0NQSVRcXFxcZ2l0ZWVcdTVGMDBcdTUzRDFcXFxcXHU4MDAzXHU4QkQ1XHU2MkE1XHU1NDBEXHU3Q0ZCXHU3RURGXFxcXFx1ODAwM1x1NzUxRlx1NjJBNVx1NTQwRFx1NTI0RFx1NTNGMFxcXFxjY3BpdHRyYW5pbmluZy1jZW50ZXJcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMzE0NjhcXFxcRGVza3RvcFxcXFxDQ1BJVFxcXFxnaXRlZVx1NUYwMFx1NTNEMVxcXFxcdTgwMDNcdThCRDVcdTYyQTVcdTU0MERcdTdDRkJcdTdFREZcXFxcXHU4MDAzXHU3NTFGXHU2MkE1XHU1NDBEXHU1MjREXHU1M0YwXFxcXGNjcGl0dHJhbmluaW5nLWNlbnRlclxcXFxwbHVnaW5zXFxcXHZpdGUtYnVpbGQtaW5mby50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvMzE0NjgvRGVza3RvcC9DQ1BJVC9naXRlZSVFNSVCQyU4MCVFNSU4RiU5MS8lRTglODAlODMlRTglQUYlOTUlRTYlOEElQTUlRTUlOTAlOEQlRTclQjMlQkIlRTclQkIlOUYvJUU4JTgwJTgzJUU3JTk0JTlGJUU2JThBJUE1JUU1JTkwJThEJUU1JTg5JThEJUU1JThGJUIwL2NjcGl0dHJhbmluaW5nLWNlbnRlci9wbHVnaW5zL3ZpdGUtYnVpbGQtaW5mby50c1wiO2ltcG9ydCB7IHJlYWRkaXIsIHN0YXQgfSBmcm9tICdub2RlOmZzJ1xyXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgUmVzb2x2ZWRDb25maWcgfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdkYXlqcydcclxuaW1wb3J0IGR1cmF0aW9uIGZyb20gJ2RheWpzL3BsdWdpbi9kdXJhdGlvbidcclxuaW1wb3J0IHBrZyBmcm9tICdwaWNvY29sb3JzJ1xyXG5cclxuY29uc3QgeyBncmVlbiwgYmx1ZSwgYm9sZCB9ID0gcGtnXHJcbmRheWpzLmV4dGVuZChkdXJhdGlvbilcclxuXHJcbmNvbnN0IGZpbGVMaXN0VG90YWw6IG51bWJlcltdID0gW11cclxuXHJcbmZ1bmN0aW9uIHJlY3Vyc2l2ZURpcmVjdG9yeShmb2xkZXI6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XHJcbiAgcmVhZGRpcihmb2xkZXIsIChlcnIsIGZpbGVzOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgaWYgKGVycilcclxuICAgICAgdGhyb3cgZXJyXHJcbiAgICBsZXQgY291bnQgPSAwXHJcbiAgICBjb25zdCBjaGVja0VuZCA9ICgpID0+IHtcclxuICAgICAgKytjb3VudCA9PT0gZmlsZXMubGVuZ3RoICYmIGNhbGxiYWNrKClcclxuICAgIH1cclxuICAgIGZpbGVzLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBzdGF0KGAke2ZvbGRlcn0vJHtpdGVtfWAsIGFzeW5jIChlcnIsIHN0YXRzKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycilcclxuICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xyXG4gICAgICAgICAgZmlsZUxpc3RUb3RhbC5wdXNoKHN0YXRzLnNpemUpXHJcbiAgICAgICAgICBjaGVja0VuZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIHJlY3Vyc2l2ZURpcmVjdG9yeShgJHtmb2xkZXJ9LyR7aXRlbX0vYCwgY2hlY2tFbmQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIGZpbGVzLmxlbmd0aCA9PT0gMCAmJiBjYWxsYmFjaygpXHJcbiAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gc3VtKGFycjogbnVtYmVyW10pIHtcclxuICByZXR1cm4gYXJyLnJlZHVjZSgodDogbnVtYmVyLCBjOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiB0ICsgY1xyXG4gIH0sIDApXHJcbn1cclxuZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYTogbnVtYmVyLCBiPzogbnVtYmVyKTogc3RyaW5nIHtcclxuICBpZiAoYSA9PT0gMClcclxuICAgIHJldHVybiAnMCBCeXRlcydcclxuICBjb25zdCBjID0gMTAyNFxyXG4gIGNvbnN0IGQgPSBiIHx8IDJcclxuICBjb25zdCBlID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddXHJcbiAgY29uc3QgZiA9IE1hdGguZmxvb3IoTWF0aC5sb2coYSkgLyBNYXRoLmxvZyhjKSlcclxuICByZXR1cm4gYCR7TnVtYmVyLnBhcnNlRmxvYXQoKGEgLyBjICoqIGYpLnRvRml4ZWQoZCkpfSAke2VbZl19YFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdml0ZUJ1aWxkSW5mbyhuYW1lOiBzdHJpbmcpOiBQbHVnaW4ge1xyXG4gIGxldCBjb25maWc6IFJlc29sdmVkQ29uZmlnXHJcbiAgbGV0IHN0YXJ0VGltZTogRGF5anNcclxuICBsZXQgZW5kVGltZTogRGF5anNcclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogJ3ZpdGU6YnVpbGRJbmZvJyxcclxuICAgIGNvbmZpZ1Jlc29sdmVkKHJlc29sdmVkQ29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZyA9IHJlc29sdmVkQ29uZmlnXHJcbiAgICB9LFxyXG4gICAgYnVpbGRTdGFydCgpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYm9sZChcclxuICAgICAgICAgIGdyZWVuKFxyXG4gICAgICAgICAgICBgXHVEODNEXHVEQzRGXHU2QjIyXHU4RkNFXHU0RjdGXHU3NTI4XHU1QzBGXHU1M0VGXHU3MjMxXHU2MjUzXHU1MzA1XHVGRjBDXHU3M0IwXHU1NzI4XHU2QjYzXHU1MTY4XHU1MjlCXHU0RTNBXHU2MEE4JHtjb25maWcuY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdcdTYyNTNcdTUzMDUnIDogJ1x1N0YxNlx1OEJEMSdcclxuICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnYnVpbGQnKVxyXG4gICAgICAgIHN0YXJ0VGltZSA9IGRheWpzKG5ldyBEYXRlKCkpXHJcbiAgICB9LFxyXG4gICAgY2xvc2VCdW5kbGUoKSB7XHJcbiAgICAgIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ2J1aWxkJykge1xyXG4gICAgICAgIGVuZFRpbWUgPSBkYXlqcyhuZXcgRGF0ZSgpKVxyXG4gICAgICAgIHJlY3Vyc2l2ZURpcmVjdG9yeShjb25maWcuYnVpbGQub3V0RGlyLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgYm9sZChcclxuICAgICAgICAgICAgICBncmVlbihcclxuICAgICAgICAgICAgICAgIGBcdTYwNkRcdTU1OUNcdTYyNTNcdTUzMDVcdTVCOENcdTYyMTBcdUQ4M0NcdURGODlcdUZGMDhcdTYwM0JcdTc1MjhcdTY1RjYke2RheWpzXHJcbiAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbihlbmRUaW1lLmRpZmYoc3RhcnRUaW1lKSlcclxuICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnbW1cdTUyMDZzc1x1NzlEMicpfVx1RkYwQ1x1NjI1M1x1NTMwNVx1NTQwRVx1NzY4NFx1NTkyN1x1NUMwRlx1NEUzQSR7Zm9ybWF0Qnl0ZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgc3VtKGZpbGVMaXN0VG90YWwpLFxyXG4gICAgICAgICAgICAgICAgICApfVx1RkYwOWAsXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxlQUFlO0FBQ3hCLFNBQVMscUJBQXFCO0FBQzlCLFlBQVksYUFBYTtBQUN6QixTQUFTLGVBQWU7OztBQ0h4QixPQUFPLFNBQVM7QUFDaEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sb0JBQW9CO0FBQzNCLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sMEJBQTBCO0FBQ2pDLE9BQU8sWUFBWTtBQUNuQixPQUFPLG1CQUFtQjs7O0FDUG5CLElBQU0sd0JBQXdCO0FBRzlCLElBQU0sYUFBYTs7O0FDSm9oQixTQUFTLFNBQVMsWUFBWTtBQUU1a0IsT0FBTyxXQUFXO0FBRWxCLE9BQU8sY0FBYztBQUNyQixPQUFPLFNBQVM7QUFFaEIsSUFBTSxFQUFFLE9BQU8sTUFBTSxLQUFLLElBQUk7QUFDOUIsTUFB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
